
package fachada;

import interfaces.IRepositorioEmpresa;
import interfaces.IRepositorioLinha;
import interfaces.IRepositorioReclamacao;
import interfaces.IRepositorioUsuario;
import repositorios.RepositorioEmpresa;
import repositorios.RepositorioEmpresaArrayList;
import repositorios.RepositorioLinha;
import repositorios.RepositorioLinhaArrayList;
import repositorios.RepositorioReclamacao;
import repositorios.RepositorioReclamacaoArrayList;
import repositorios.RepositorioUsuario;
import repositorios.RepositorioUsuarioArrayList;
import util.Constantes;
import cadastro.CadastroEmpresa;
import cadastro.CadastroLinha;
import cadastro.CadastroReclamacao;
import cadastro.CadastroUsuario;


public class Fachada {

	private static Fachada instancia;
	private CadastroUsuario cadUsuario;
	private CadastroReclamacao cadReclamacao;
	private CadastroLinha cadLinha;
	private CadastroEmpresa cadEmpresa;

	private Fachada(){
		iniciarContoladores();
	}

	public static Fachada getInstancia(){
		if (instancia == null){
			instancia = new Fachada();
		}
		return instancia;
	}

	private void iniciarContoladores(){
		
		IRepositorioUsuario repUsuario = null;
		IRepositorioReclamacao repReclamacao = null;
		IRepositorioLinha repLinha = null;
		IRepositorioEmpresa repEmpresa = null;
		
		if(Constantes.TIPO_BD.equals(Constantes.MYSQL)){
			repUsuario = new RepositorioUsuario();
			repReclamacao = new RepositorioReclamacao();
			repLinha = new RepositorioLinha();
			repEmpresa = new RepositorioEmpresa();
		}
		else if(Constantes.TIPO_BD.equals(Constantes.ARRAY_LIST)){
			repUsuario = new RepositorioUsuarioArrayList();
			repReclamacao = new RepositorioReclamacaoArrayList();
			repLinha = new RepositorioLinhaArrayList();
			repEmpresa = new RepositorioEmpresaArrayList();
		}
		
		cadUsuario = new CadastroUsuario(repUsuario);
		cadReclamacao = new CadastroReclamacao(repReclamacao);
		cadLinha = new CadastroLinha(repLinha);
		cadEmpresa = new CadastroEmpresa(repEmpresa);
	}

	public CadastroUsuario cadastroUsuario(){
		return cadUsuario;
	}

	public CadastroReclamacao cadastroReclamacao(){
		return cadReclamacao;
	}

	public CadastroLinha cadastroLinha(){
		return cadLinha;
	}

	public CadastroEmpresa cadastroEmpresa(){
		return cadEmpresa;
	}
}

